/*
#Copyright (c) 2013, Philippe Bordron <philippe.bordron@gmail.com>
#
# This file is part of SIPPER.
#
# DCC is free software: you can redistribute it and/or modify
# it under the terms of the GNU LESSER GENERAL PUBLIC LICENSE as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# DCC is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU LESSER GENERAL PUBLIC LICENSE for more details.
#
# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE
# along with SIPPER.  If not, see <http://www.gnu.org/licenses/>
*/
package combi.sipper.modeling;

import java.util.List;
import java.util.Map;
import java.util.Set;

import org.jgrapht.DirectedGraph;
import org.jgrapht.GraphPath;
import org.jgrapht.graph.DefaultWeightedEdge;

import combi.graph.Kpaths;

public abstract class IntegratedModel {
	protected DirectedGraph<Integer,DefaultWeightedEdge> graph;
	

	protected Map<String, Set<Integer>> entityToVertices;

	protected String[] vertex2CU;
	protected String[] vertex2Reaction;
	
	protected Set<String> genesSet;
	protected Set<String> reactionsSet;
	protected Set<String> enzymeSet;
	
	public abstract Set<String> getEntities(String id);
	
	public abstract Set<String> getGenes();
	
	public abstract Set<String> getEnzymes();
	
	public abstract Set<String> getReactions() ;
	

	public DirectedGraph<Integer, DefaultWeightedEdge> getGraph() {
		return graph;
	}
	
	public Set<String> getGenes(Set<Integer> vertices) {
		// TODO Auto-generated method stub
		return null;
	}

	public Set<String> getReactions(Set<Integer> vertices) {
		// TODO Auto-generated method stub
		return null;
	}

	public Set<String> getEnzymes(Set<Integer> vertices) {
		// TODO Auto-generated method stub
		return null;
	}

	public abstract Set<String> getCUs(Set<Integer> vertices);
	
	public Set<Integer> getVertices(String id)
	{
		return entityToVertices.get(id);
	}

	public List<String> getReactionChain(GraphPath<Integer, DefaultWeightedEdge> path) {
		// TODO Auto-generated method stub
		return null;
	}
	
	public List<String> getGeneChain(GraphPath<Integer, DefaultWeightedEdge> path) {
		// TODO Auto-generated method stub
		return null;
	}

	public List<String> getEnzymeChain(GraphPath<Integer, DefaultWeightedEdge> path) {
		// TODO Auto-generated method stub
		return null;
	}
	
	public List<List<String>> getKReactionChain(Kpaths<Integer, DefaultWeightedEdge> paths) {
		// TODO Auto-generated method stub
		return null;
	}
	
	public List<List<String>> getKGeneChain(Kpaths<Integer, DefaultWeightedEdge> paths) {
		// TODO Auto-generated method stub
		return null;
	}

	public List<List<String>> getKEnzymeChain(Kpaths<Integer, DefaultWeightedEdge> paths) {
		// TODO Auto-generated method stub
		return null;
	}
	

	public DirectedGraph<String, DefaultWeightedEdge> getReactionSubgraph(Kpaths<Integer, DefaultWeightedEdge> paths) {
		// TODO Auto-generated method stub
		return null;
	}
	
	public DirectedGraph<String, DefaultWeightedEdge> getGeneSubgraph(Kpaths<Integer, DefaultWeightedEdge> paths) {
		// TODO Auto-generated method stub
		return null;
	}
	
	public DirectedGraph<String, DefaultWeightedEdge> getEnzymeSubgraph(Kpaths<Integer, DefaultWeightedEdge> paths) {
		// TODO Auto-generated method stub
		return null;
	}

	
}
